package com.ztrue.framework.handler;

/**
 * 表示一个处理器注册表
 *
 * @author zhangw
 * @date 2016/11/15 16:25
 * @version: 1.0
 */
public interface IHandlerRegistry {
    /**
     * 添加一个处理器到注册表
     *
     * @param handlerName 处理器名称
     * @param handler     处理器对象
     */
    void addHandler(String handlerName, Object handler);

    /**
     * 根据处理器名称获取处理器对象
     *
     * @param handlerName 处理器名称
     * @return
     */
    Object getHandler(String handlerName);

    /**
     * 根据处理器名称和处理器类型获取处理器对象
     *
     * @param handlerName  处理器名称
     * @param requiredType 处理器类型
     * @param <T>
     * @return
     */
    <T> T getHandler(String handlerName, Class<T> requiredType);

    /**
     * 根据处理器类型获取处理器对象
     *
     * @param requiredType 处理器类型
     * @param <T>
     * @return
     */
    <T> T getHandler(Class<T> requiredType);
}